home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 1 / BBS in a box - Trilogy I.iso / Files / Publish / Photoshop / Plug-in Modules / Code / HistoryExport.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-22  |  6.0 KB  |  330 lines  |  [TEXT/MPS ]

  1. /*
  2.     File: HistoryExport.c
  3.  
  4.     Copyright 1990 by Thomas Knoll.
  5.     Copyright 1993 by Adobe Systems, Inc.
  6.  
  7.     C source file for HistoryExport example.
  8. */
  9.  
  10. #include <Types.h>
  11. #include <Memory.h>
  12. #include <Resources.h>
  13. #include <QuickDraw.h>
  14. #include <Dialogs.h>
  15. #include <OSUtils.h>
  16. #include <Packages.h>
  17. #include <Errors.h>
  18. #include <ToolUtils.h>
  19.  
  20. #include "PITypes.h"
  21. #include "PIGeneral.h"
  22. #include "PIExport.h"
  23.  
  24. #include "DialogUtilities.h"
  25. #include "PIUtilities.h"
  26.  
  27. #ifdef THINK_C
  28.  
  29. #define ENTRYPOINT main
  30.  
  31. #endif
  32.  
  33. /*****************************************************************************/
  34.  
  35. typedef struct Globals
  36.     {
  37.  
  38.     short result;
  39.     ExportRecord *stuff;
  40.     
  41.     short fRefNum;
  42.     short vRefNum;
  43.  
  44.     } Globals, *GPtr;
  45.     
  46. #define gResult ((*globals).result)
  47. #define gStuff  ((*globals).stuff)
  48.  
  49. #define gFRefNum ((*globals).fRefNum)
  50. #define gVRefNum ((*globals).vRefNum)
  51.  
  52. /*****************************************************************************/
  53.  
  54. void InitGlobals (GPtr globals);
  55.  
  56. void DoAbout (GPtr globals);
  57. void DoPrepare (GPtr globals);
  58. void DoStart (GPtr globals);
  59. void DoContinue (GPtr globals);
  60. void DoFinish (GPtr globals);
  61.  
  62. /*****************************************************************************/
  63.  
  64. /* All calls to the plug-in module come through this routine. It must be
  65.    placed first in the resource. To achieve this, most development systems
  66.    require that this be the first routine in the source. */
  67.  
  68. pascal void ENTRYPOINT (short selector,
  69.                         ExportRecord *stuff,
  70.                         long *data,
  71.                         short *result)
  72.     {
  73.     
  74.     GPtr globals;
  75.     
  76.     if (!*data)
  77.         {
  78.  
  79.         *data = (long) NewPtr (sizeof (Globals));
  80.         
  81.         if (!*data)
  82.             {
  83.             *result = memFullErr;
  84.             return;
  85.             }
  86.             
  87.         InitGlobals ((GPtr) *data);
  88.         
  89.         }
  90.         
  91.     globals = (GPtr) *data;
  92.         
  93.     gStuff = stuff;
  94.     gResult = noErr;
  95.         
  96.     switch (selector)
  97.         {
  98.         
  99.         case exportSelectorAbout:
  100.             DoAbout (globals);
  101.             break;
  102.             
  103.         case exportSelectorPrepare:
  104.             DoPrepare (globals);
  105.             break;
  106.         
  107.         case exportSelectorStart:
  108.             DoStart (globals);
  109.             break;
  110.         
  111.         case exportSelectorContinue:
  112.             DoContinue (globals);
  113.             break;
  114.         
  115.         case exportSelectorFinish:
  116.             DoFinish (globals);
  117.             break;
  118.             
  119.         default:
  120.             gResult = exportBadParameters;
  121.         
  122.         }
  123.         
  124.     *result = gResult;
  125.         
  126.     }
  127.  
  128. /*****************************************************************************/
  129.  
  130. void InitGlobals (GPtr globals)
  131.     {
  132.     
  133.     #pragma unused (globals)
  134.     
  135.     /* None of the globals requires initialization. */
  136.     
  137.     }
  138.  
  139. /*****************************************************************************/
  140.  
  141. /* Displays the about dialog box for the plug-in module. */
  142.  
  143. void DoAbout (GPtr globals)
  144.     {
  145.  
  146.     #pragma unused (globals)
  147.     
  148.     #define dialogID 17000
  149.     
  150.     ShowAbout (dialogID);
  151.  
  152.     #undef dialogID
  153.  
  154.     }
  155.  
  156. /*****************************************************************************/
  157.  
  158. /* Prepare to export an image.    If the plug-in module needs only a limited
  159.    amount of memory, it can lower the value of the 'maxData' field. */
  160.  
  161. void DoPrepare (GPtr globals)
  162.     {
  163.     
  164.     gStuff->maxData = 0;
  165.     
  166.     }
  167.  
  168. /*****************************************************************************/
  169.  
  170. static void GetHistory (GPtr globals, int16 index, Str255 string)
  171.     {
  172.     
  173.     string [0] = 0;
  174.     
  175.     if (CountPIResources ('hist') >= index)
  176.         {
  177.         
  178.         Handle h = GetPIResource ('hist', index);
  179.         
  180.         if (h)
  181.             {
  182.             
  183.             int32 length = PIGetHandleSize (h);
  184.             
  185.             if (length > 255)
  186.                 length = 255;
  187.                 
  188.             if (length > 0)
  189.                 {
  190.                 
  191.                 BlockMove (*h, &(string [1]), length);
  192.                 
  193.                 string [0] = (unsigned char) length;
  194.                 
  195.                 }
  196.             
  197.             }
  198.         
  199.         }
  200.  
  201.     }
  202.  
  203. /*****************************************************************************/
  204.  
  205. /* Requests pointer to the first part of the image to be filtered. */
  206.  
  207. void DoStart (GPtr globals)
  208.     {
  209.     
  210.     #define dialogID    17001
  211.     #define trimFirst    3
  212.     #define trimLast    4
  213.     #define hookItem    5
  214.     #define histItem1    6
  215.     #define histItem2    7
  216.     #define histItem3    8
  217.     #define histItem4    9
  218.     
  219.     Str255 history1;
  220.     Str255 history2;
  221.     Str255 history3;
  222.     Str255 history4;
  223.     short item;
  224.     DialogPtr dp;
  225.     DialogTHndl dt;
  226.     
  227.     gStuff->theRect.top =
  228.     gStuff->theRect.left =
  229.     gStuff->theRect.bottom =
  230.     gStuff->theRect.right = 0;
  231.     
  232.     if (!WarnResourceProcsAvailable ())
  233.         return;
  234.         
  235.     dt = (DialogTHndl) GetResource ('DLOG', dialogID);
  236.     HNoPurge ((Handle) dt);
  237.     
  238.     CenterDialog (dt);
  239.     SetUpMoveableModal (dt, gStuff->hostSig);
  240.  
  241.     dp = GetNewDialog (dialogID, nil, (WindowPtr) -1);
  242.  
  243.     SetOutlineOKHook (dp, hookItem);
  244.     
  245.     do
  246.         {
  247.         
  248.         GetHistory (globals, 1, history1);
  249.         GetHistory (globals, 2, history2);
  250.         GetHistory (globals, 3, history3);
  251.         GetHistory (globals, 4, history4);
  252.         
  253.         ParamText (history1, history2, history3, history4);
  254.         
  255.         if (CountPIResources ('hist') > 0)
  256.             {
  257.             EnableControl (dp, trimFirst);
  258.             EnableControl (dp, trimLast);
  259.             }
  260.         else
  261.             {
  262.             DisableControl (dp, trimFirst);
  263.             DisableControl (dp, trimLast);
  264.             }
  265.         
  266.         MoveableModalDialog (dp, gStuff->processEvent, nil, &item);
  267.  
  268.         if (item == trimFirst && CountPIResources ('hist') > 0)
  269.             {
  270.             
  271.             DeletePIResource ('hist', 1);
  272.             
  273.             InvalItem (dp, histItem1);
  274.             InvalItem (dp, histItem2);
  275.             InvalItem (dp, histItem3);
  276.             InvalItem (dp, histItem4);
  277.             
  278.             }
  279.  
  280.         if (item == trimLast && CountPIResources ('hist') > 0)
  281.             {
  282.             
  283.             DeletePIResource ('hist', CountPIResources ('hist'));
  284.             
  285.             InvalItem (dp, histItem1);
  286.             InvalItem (dp, histItem2);
  287.             InvalItem (dp, histItem3);
  288.             InvalItem (dp, histItem4);
  289.             
  290.             }
  291.  
  292.         }
  293.     while (item != ok && item != cancel);
  294.  
  295.     DisposDialog (dp);
  296.     HPurge ((Handle) dt);
  297.     
  298.     #undef dialogID
  299.     #undef trimItem
  300.     #undef hookItem
  301.  
  302.     }
  303.  
  304. /*****************************************************************************/
  305.  
  306. /* Filters the area and requests the next area. */
  307.  
  308. void DoContinue (GPtr globals)
  309.     {
  310.     
  311.     #pragma unused (globals)
  312.     
  313.     }
  314.  
  315. /*****************************************************************************/
  316.  
  317. /* This routine will always be called if DoStart does not return an error
  318.    (even if DoContinue returns an error or the user aborts the operation).
  319.    This allows the module to perform any needed cleanup.  None is required
  320.    in this example. */
  321.  
  322. void DoFinish (GPtr globals)
  323.     {
  324.     
  325.     #pragma unused (globals)
  326.     
  327.     }
  328.  
  329. /*****************************************************************************/
  330.